iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Modern Web

就是個Go,我也可以啦!GOGO系列 第 26

# 2023鐵人賽Day 26 go X database 航母的作戰指揮中心

  • 分享至 

  • xImage
  •  

昨天我們聊到了docking與open,其實這讓我想起星際效應cooper駕駛著登陸小艇嘗試與母艦對接的場景,對接完成後(register),打開艦艇(open)然後就可以做我們想做的事了,這一節就是要來寫他能做什麼

https://ithelp.ithome.com.tw/upload/images/20231011/20150980j8lJtvmG8b.jpg

開啟通道後我們要趕快衝到指揮中心下達我們的指示

Conn 航母的作戰指揮中心

Conn 是一個數據庫連接的介面定義,它定義了一些方法來與數據庫進行交互。這些方法包括 Prepare、Close 和 Begin,分別用於創建預處理語句、關閉連接和開始一個新的事務

type Conn interface {
    Prepare(query string) (Stmt, error)
    Close() error
    Begin() (Tx, error)
}

我們來一一細看

Prepare 作戰計劃的制定與Prepare方法的占位符

prepare就像是航母的作戰中心,這個作戰中心在出發前會先制定一些核心的行動步驟,但會先預留一些"待定因素"或"變數"來應對未來可能發生的不確定情況,這些變數,在go裡面我們稱為占位符,他們在計畫初步階段不會被填滿,會流者空白,等到時候實際作戰時可以快速被使用

例如,計劃可能包含以下步驟:

  1. 移動至目標區域 [X]
  2. 在區域 [X] 部署部隊
  3. 根據敵方的行動 [Y] 調整策略
  4. 執行特定的攻擊或防禦行動 [Z]

在這裡,[X]、[Y]、和 [Z]就是預留的填空,就像是go的占位符,在制定這些計畫時,可能還不清楚具體的數值或行動,這些占位符會在計劃執行的過程中,根據實際的情況和需要,被具體的位置、敵方行動和我方策略替換

prepare就是做這件事,Prepare方法創建預處理的 SQL 語句時,開發者可能會留下一些占位符,這些占位符將在語句被多次執行時,被不同的參數值替換

INSERT INTO soldiers (name, rank, location) VALUES (?, ?, ?)

在這個 SQL 語句中,三個問號就是占位符,它們在執行語句時會被具體的值(例如,士兵的名字、軍階和位置)替換

Close 作戰結束與Close方法的連接關閉

當一場作戰結束時,作戰指揮中心會進行一系列的結束流程,包括撤回部隊、關閉臨時設立的前線指揮部、保存或銷毀敏感資料,以及斷開與前線的通訊連接。這些步驟確保了作戰的有序結束,並防止了可能的資訊洩露或未來的安全風險。

例如,作戰結束的流程可能包括:

  • 撤回部隊:將士兵和裝備安全地撤回基地
  • 關閉指揮部:拆除在戰場上設立的指揮部並確保所有敏感資料的安全
  • 斷開通訊:切斷與前線部隊的通訊連接,防止敵方利用遺留的通訊設備
func (c *Conn) Close() error
  • 結束操作:確保所有的數據操作(如查詢或更新)都已經完成
  • 釋放資源:釋放該連接佔用的所有資源,例如,網絡連接、內存等
  • 斷開連接:從數據庫伺服器斷開連接,確保不再接收或發送任何數據

Begin 開始一場作戰與Begin方法的事務開始

當軍隊開始一場作戰時,會有一個明確的開始點,這個開始點涉及到多個環節的協同工作,例如動員部隊、設立通訊、確保補給線等。從這個時刻開始,所有的行動和資源都會被協調和監控,以確保作戰目標的達成

例如,開始一場作戰可能包括:

  • 動員部隊:將士兵和裝備部署到指定位置
  • 建立通訊:確保前線與指揮中心之間的通訊暢通無阻
  • 監控行動:實時追蹤部隊的行動和狀態,並根據情況調整策略
func (c *Conn) Begin() (Tx, error)

當你調用Begin方法時,你告訴數據庫:“我要開始一個新的事務(Transaction)了。” 這個事務會從這個點開始,追蹤所有的數據操作(如插入、更新或刪除),直到事務被提交(Commit)或回滾(Rollback)。在事務期間,數據庫會確保所有的操作要麼全部成功,要麼在發生錯誤時全部不產生效果

  • 記錄開始:標記事務的開始,追蹤後續的所有數據變更
  • 執行操作:在事務中執行一系列的數據操作
  • 確保一致性:在事務結束時確保所有的操作要麼全部成功,要麼在出錯時不會對數據庫產生任何影響

上一篇
2023鐵人賽Day 25 數據艙門的星際對接:Go database/sql 的連接探索
下一篇
2023鐵人賽Day 27 Go X 你應該知道的ORM實作難題 X GORM 建立model及CRUD
系列文
就是個Go,我也可以啦!GOGO30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言